package com.main;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

import com.entity.DeductPromotion;
import com.entity.DiscountPromotion;
import com.entity.Order;
import com.entity.OrderItem;
import com.entity.Product;
import com.entity.Promotion;

public class Main {

	public static void main(String[] args) {

		// 苹果
		Product p1 = new Product(new BigDecimal("8"), "苹果");
		// 草莓
		Product p2 = new Product(new BigDecimal("13"), "草莓");
		// 芒果
		Product p3 = new Product(new BigDecimal("20"), "芒果");

		// 让用户输入需要购买的苹果 草莓数量
		try (Scanner scanner = new Scanner(System.in)) {
			System.out.println("请输入A需要购买的苹果数量：");
			int x1 = scanner.nextInt();
			System.out.println("请输入A需要购买的草莓数量：");
			int y1 = scanner.nextInt();

			//		1、有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。 现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
			//		 * 请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
			List<OrderItem> items1 = Arrays.asList(new OrderItem(p1, x1), new OrderItem(p2, y1));
			Order order = new Order(items1);

			BigDecimal totalPrice1 = Calculate.calculatePrice(order);

			order.setTotalPrice(totalPrice1);
			System.out.println("顾客A的订单总价为" + totalPrice1);

			//		2、超市增加了一种水果芒果，其定价为 20 元/斤。
			//		现在顾客 B 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
			//		请编写函数，对于 B 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。

			System.out.println("请输入B需要购买的苹果数量：");
			int x2 = scanner.nextInt();
			System.out.println("请输入B需要购买的草莓数量：");
			int y2 = scanner.nextInt();
			System.out.println("请输入B需要购买的芒果数量：");
			int z2 = scanner.nextInt();

			List<OrderItem> items2 = Arrays.asList(new OrderItem(p1, x2), new OrderItem(p2, y2), new OrderItem(p3, z2));
			Order order2 = new Order(items2);

			BigDecimal totalPrice2 = Calculate.calculatePrice(order2);

			order.setTotalPrice(totalPrice2);
			System.out.println("顾客B的订单总价为" + totalPrice2);

			//		3、超市做促销活动，草莓限时打 8 折。
			//		现在顾客 C 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
			//		请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。

			Promotion promotion1 = new DiscountPromotion(new BigDecimal("0.8"));
			// 限定促销范围为草莓
			promotion1.setProductList(Arrays.asList(p2));
			promotion1.setName("草莓限时促销");
			Order order3 = new Order(items2, Arrays.asList(promotion1));

			BigDecimal totalPrice3 = Calculate.calculatePrice(order3);

			order.setTotalPrice(totalPrice3);
			System.out.println("顾客C的订单总价为" + totalPrice3);
			//		4、促销活动效果明显，超市继续加大促销力度，购物满 100 减 10 块。
			//		现在顾客 D 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
			//		请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
			
			Promotion promotion2 = new DeductPromotion(new BigDecimal("100"),new BigDecimal("10"));
			promotion2.setName("满减促销");
			Order order4 = new Order(items2, Arrays.asList(promotion1,promotion2));

			BigDecimal totalPrice4 = Calculate.calculatePrice(order4);

			order.setTotalPrice(totalPrice4);
			System.out.println("顾客D的订单总价为" + totalPrice4);
		}
	}

}
